// 这个是普通版本的线程池

#include <iostream>
#include <ctime>
#include "ThreadPool.hpp"   // 线程池头文件
#include "Task.hpp"         // 任务类头文件

int main()
{
    // 直接创建进程池
    ThreadPool<Task> *tp = new ThreadPool<Task>(5);  // 创建5个线程的线程池
    tp->Start();
    
    srand(time(nullptr) ^ getpid());

    // 主循环：持续生成任务
    while(true)
    {
        // 1. 构建任务
        int x = rand() % 10 + 1;    // 生成1-10的随机数作为第一个操作数
        usleep(10);                 // 短暂休眠，增加随机数的离散性
        int y = rand() % 5;         // 生成0-4的随机数作为第二个操作数
        // 从操作符数组中随机选择一个操作符
        char op = opers[rand()%opers.size()];

        // 创建任务对象
        Task t(x, y, op);
        // 将任务提交给线程池
        tp->Push(t);
        
        // 2. 交给线程池处理
        // 输出任务信息，表示主线程创建了什么任务
        std::cout << "main thread make task: " << t.GetTask() << std::endl;

        // 休眠1秒，控制任务生成速率
        sleep(1);
    }
}